Typical HAL SMARTCARD use cases for migration ¶
This section provides information about typical HAL SMARTCARD use cases for migration.
Note
The processes for transmitting and receiving data using polling, interrupt, or DMA remain unchanged in HAL1 and HAL2.
Note
In both HAL1 and HAL2, the size parameter in the transmit and receive APIs represents the amount of data in bytes.
Use case: SMARTCARD communication in polling mode ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
#define DATA_TO_SEND_SIZE 256
#define DATA_TO_RECEIVE_SIZE DATA_TO_SEND_SIZE
uint8_t aTxBuffer[] = " **** Smartcard Communication **** ";
uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];
SMARTCARD_HandleTypeDef hsmartcard;
HAL_SMARTCARD_Init(&hsmartcard);
HAL_SMARTCARD_Receive(&hsmartcard, aRxBuffer,
DATA_TO_RECEIVE_SIZE, 1000);
HAL_SMARTCARD_Transmit(&hsmartcard, aTxBuffer,
DATA_TO_SEND_SIZE, 1000);
|
#define DATA_TO_SEND_SIZE 256
#define DATA_TO_RECEIVE_SIZE DATA_TO_SEND_SIZE
uint8_t aTxBuffer[] = " **** Smartcard Communication **** ";
uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];
hal_smartcard_handle_t hsmartcard;
hal_smartcard_config_t smartcard_config;
HAL_SMARTCARD_Init(&hsmartcard, HAL_SMARTCARD4);
/* add config for smartcard instance */
HAL_SMARTCARD_SetConfig(&hsmartcard, &smartcard_config);
HAL_SMARTCARD_Receive(&hsmartcard, aRxBuffer,
DATA_TO_RECEIVE_SIZE, 1000);
HAL_SMARTCARD_Transmit(&hsmartcard, aTxBuffer,
DATA_TO_SEND_SIZE, 1000);
|
Key changes ¶
The polling transmit/receive process is unchanged between HAL1 and HAL2.
HAL2 introduces the handle/config model and requires configuring the SMARTCARD instance before communication.
Use case: SMARTCARD RX IT process ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
#define DATA_TO_RECEIVE_SIZE 256
uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];
SMARTCARD_HandleTypeDef hsmartcard;
/* Ensure that all required peripherals
(USART, GPIO, NVIC etc.) are configured properly
/*
...
*/
/* Smartcard register Receive complete user callback */
HAL_SMARTCARD_RegisterCallback(&hsmartcard, HAL_SMARTCARD_RX_CB_ID,
Smartcard_RxCpltCallback);
/* Start a Smartcard Process in interruption mode */
HAL_SMARTCARD_Receive_IT(&hsmartcard, aRxBuffer,
DATA_TO_RECEIVE_SIZE);
|
#define DATA_TO_RECEIVE_SIZE 256
uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];
hal_smartcard_handle_t hsmartcard;
/* Ensure that all required peripherals
(USART, GPIO, NVIC etc.) are configured properly
/*
...
*/
/* Smartcard register Receive complete user callback */
HAL_SMARTCARD_RegisterRxCpltCallback(&hsmartcard, Smartcard_RxCpltCallback);
/* Start a Smartcard Process in interruption mode */
HAL_SMARTCARD_Receive_IT(&hsmartcard, aRxBuffer,
DATA_TO_RECEIVE_SIZE);
|
Key changes ¶
HAL2 uses the SMARTCARD handle type hal_smartcard_handle_t.
HAL2 provides a dedicated receive-complete callback registration API (HAL_SMARTCARD_RegisterRxCpltCallback).
Use case: SMARTCARD TX IT process ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
#define DATA_TO_SEND_SIZE 256
uint8_t aTxBuffer[DATA_TO_SEND_SIZE] = " **** Smartcard Communication **** ";
SMARTCARD_HandleTypeDef hsmartcard;
/* Ensure that all required peripherals
(USART, GPIO, NVIC etc.) are configured properly
/*
...
*/
/* Smartcard register Transmit complete user callback */
HAL_SMARTCARD_RegisterCallback(&hsmartcard, HAL_SMARTCARD_TX_CB_ID,
Smartcard_TxCpltCallback);
/* Start a Smartcard Process in interruption mode */
HAL_SMARTCARD_Transmit_IT(&hsmartcard, aTxBuffer,
DATA_TO_SEND_SIZE);
|
#define DATA_TO_SEND_SIZE 256
uint8_t aTxBuffer[DATA_TO_SEND_SIZE] = " **** Smartcard Communication **** ";
hal_smartcard_handle_t hsmartcard;
/* Ensure that all required peripherals
(USART, GPIO, NVIC etc.) are configured properly
/*
...
*/
/* Smartcard register Transmit complete user callback */
HAL_SMARTCARD_RegisterTxCpltCallback(&hsmartcard, Smartcard_TxCpltCallback);
/* Start a Smartcard Process in interruption mode */
HAL_SMARTCARD_Transmit_IT(&hsmartcard, aTxBuffer,
DATA_TO_SEND_SIZE);
|
Key changes ¶
HAL2 uses the SMARTCARD handle type hal_smartcard_handle_t.
HAL2 provides a dedicated transmit-complete callback registration API (HAL_SMARTCARD_RegisterTxCpltCallback).
Use case: SMARTCARD RX DMA process ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
#define DATA_TO_RECEIVE_SIZE 255
SMARTCARD_HandleTypeDef hsmartcard;
uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];
/* Ensure that all required peripherals
(USART, GPIO,NVIC,DMA etc.) are configured properly
/*
...
*/
/* Smartcard register Receive complete user callback */
HAL_SMARTCARD_RegisterCallback(&hsmartcard, HAL_SMARTCARD_RX_CB_ID,
Smartcard_RxCpltCallback);
/* Start a Smartcard Process in dma mode */
HAL_SMARTCARD_Receive_DMA(&hsmartcard, aRxBuffer,
DATA_TO_RECEIVE_SIZE)
|
#define DATA_TO_RECEIVE_SIZE 255
hal_smartcard_handle_t hsmartcard;
uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];
/* Ensure that all required peripherals
(USART, GPIO,NVIC,DMA etc.) are configured properly
/*
...
*/
/* Smartcard register Receive complete user callback */
HAL_SMARTCARD_RegisterRxCpltCallback(&hsmartcard, Smartcard_RxCpltCallback);
/* Start a Smartcard Process in dma mode */
HAL_SMARTCARD_Receive_DMA(&hsmartcard, aRxBuffer,
DATA_TO_RECEIVE_SIZE)
|
Key changes ¶
HAL2 uses a different DMA start API for peripheral transfers (HAL_DMA_StartPeriphXfer_IT_Opt).
HAL2 provides a dedicated receive-complete callback registration API (HAL_SMARTCARD_RegisterRxCpltCallback).
Use case: SMARTCARD TX DMA process ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
#define DATA_TO_SEND_SIZE 255
SMARTCARD_HandleTypeDef hsmartcard;
uint8_t aTxBuffer[DATA_TO_SEND_SIZE] = " **** Smartcard Communication **** ";
/* Ensure that all required peripherals
(USART, GPIO,NVIC,DMA etc.) are configured properly
/*
...
*/
/* Smartcard register Transmit complete user callback */
HAL_SMARTCARD_RegisterCallback(&hsmartcard, HAL_SMARTCARD_TX_CB_ID,
Smartcard_TxCpltCallback);
/* Start a Smartcard Process in dma mode */
HAL_SMARTCARD_Transmit_DMA(&hsmartcard, aTxBuffer,
DATA_TO_SEND_SIZE)
|
#define DATA_TO_SEND_SIZE 255
hal_smartcard_handle_t hsmartcard;
uint8_t aTxBuffer[DATA_TO_SEND_SIZE] = " **** Smartcard Communication **** ";
/* Ensure that all required peripherals
(USART, GPIO,NVIC,DMA etc.) are configured properly
/*
...
*/
/* Smartcard register Transmit complete user callback */
HAL_SMARTCARD_RegisterTxCpltCallback(&hsmartcard, Smartcard_TxCpltCallback);
/* Start a Smartcard Process in dma mode */
HAL_SMARTCARD_Transmit_DMA(&hsmartcard, aTxBuffer,
DATA_TO_SEND_SIZE);
|
Key changes ¶
HAL2 uses a different DMA start API for peripheral transfers (HAL_DMA_StartPeriphXfer_IT_Opt).
HAL2 provides a dedicated transmit-complete callback registration API (HAL_SMARTCARD_RegisterTxCpltCallback).








